Ana içeriğe geç

Hash Tablosu (Hash Table) Örneği

Hash tablosu, verileri hızlı bir şekilde depolamak ve erişmek için kullanılan etkili bir veri yapısıdır. Veriler, bir anahtar-değer çifti şeklinde depolanır ve anahtarlar, bir karma işlemine tabi tutularak bir dizin numarasına dönüştürülür. Bu dizin numarası, veri depolamak için kullanılan dizideki bir hücreyi işaret eder.

Hash tablosu kullanımı, verilerin hızlıca eklenebilmesi, silinebilmesi ve aranabilmesi için son derece yararlıdır. Bu veri yapısı, hızlı bir arama süresi sağlar ve büyük miktarda veri işleme için optimize edilmiştir. Özellikle büyük veri setleri üzerinde çalışan uygulamalar için oldukça önemlidir.

ALGORİTMA HashTable

SABİT boyut = 10

// Hash table'ın boş olması için tüm değerler null olarak atanır
DEĞİŞKEN tablo[0..boyut-1] = null

// Key değerlerinin hash değerlerinin hesaplanması için bir hash fonksiyonu tanımlanır
FONKSİYON hashFonksiyonu(key)
hash = 0
HER KARAKTER İÇİN c IN key
hash = (hash + ASCII(c)) % boyut
HER_KARAKTER İÇİN_SONU
return hash
FONKSİYON SONU

// Key ve value değerleri alarak hash table'a eleman ekleme işlemi yapılır
FONKSİYON elemanEkle(key, value)
hash = hashFonksiyonu(key)
tablo[hash] = value
FONKSİYON SONU

// Key değerine göre hash table'dan eleman silme işlemi yapılır
FONKSİYON elemanSil(key)
hash = hashFonksiyonu(key)
tablo[hash] = null
FONKSİYON SONU

// Key değerine göre hash table'dan eleman getirme işlemi yapılır
FONKSİYON elemanGetir(key)
hash = hashFonksiyonu(key)
return tablo[hash]
FONKSİYON SONU

ALGORİTMA SONU

Hash Tablosu Tanımlama

Tablonun boyutunu ve elemanların tutulacağı veri tipini belirledikten sonra, aşağıdaki gibi bir hash tablosu tanımlayabiliriz:

hash_tablosu = yeni boş hash_tablosu

Burada "yeni boş hash_tablosu" ifadesi, programlama diline göre farklı şekillerde yazılabilir. Ancak genel olarak, bu ifade, hash tablosunun bellekte boş bir alana yerleştirildiğini ve kullanıma hazır olduğunu belirtir.

### Hash Tablosuna Eleman Ekleme

Tabloya eleman eklemek için aşağıdaki pseudo kod kullanılabilir:

  1. Eklenecek elemanın anahtarının hash fonksiyonu yardımıyla tablodaki indeksini bul.
  2. Eğer o indeks boş ise, elemanı bu indekse ekle.
  3. Eğer o indeks doluysa, çakışma (collision) olmuş demektir. Bunun için kullanılacak çakışma çözme yöntemine göre elemanın yerleştirileceği yeni indeks belirlenir.
  4. Yeni indeks bulunduktan sonra, eleman bu indekse eklenir.

Aşağıda Türkçe pseudo kod örneği verilmiştir:

HASH_TABLOSU = boş hash tablosu

fonksiyon eleman_ekle(anahtar, değer):
indeks = hash_fonksiyonu(anahtar)
if HASH_TABLOSU[indeks] boş: # indeks boş ise elemanı ekle
HASH_TABLOSU[indeks] = (anahtar, değer)
else: # indeks doluysa çakışma çözme yöntemine göre yeni bir indeks belirle
yeni_indeks = cakisma_cozme_yontemi(anahtar, indeks)
HASH_TABLOSU[yeni_indeks] = (anahtar, değer)

Hash Tablosundan Eleman Çıkarma

Aşağıda bir hash tablosundan eleman çıkarma işlemi için örnek bir Türkçe pseudo kod bulabilirsiniz:

Fonksiyon elemanCikar(hashTablosu, anahtar):
indeks = hash(anahtar) % boyut
liste = hashTablosu[indeks]

for i in aralik(0, uzunluk(liste)-1):
if liste[i][0] == anahtar:
deger = liste[i][1]
sil(liste[i])
return deger

hata("Eleman bulunamadi")

Bu kod, belirli bir anahtarı kullanarak bir hash tablosundan bir elemanı çıkarır. Fonksiyon, önce anahtarın hangi indekse sahip olduğunu bulmak için bir hash fonksiyonu kullanır. Daha sonra, ilgili indeksteki liste içinde anahtara karşılık gelen elemanı bulur ve elemanı çıkarır. Eğer eleman bulunamazsa, hata mesajı verir.

Hash Tablosunda Eleman Arama

Aşağıdaki Türkçe pseudo kod, bir hash tablosunda eleman arama işlemini gerçekleştirmek için kullanılabilir:

ALGORİTMA elemanAra(hashTablosu, anahtar):
indeks = hashFonksiyonu(anahtar)
bulundu = YANLIŞ
i = 0
SONSUZ DÖNGÜ:
EĞER hashTablosu[indeks] eşit değil None VE hashTablosu[indeks][0] eşit değil anahtar:
indeks = yenidenHashle(indeks, i)
i = i + 1
EĞER hashTablosu[indeks] eşit değil None VE hashTablosu[indeks][0] eşit ise anahtar:
bulundu = DOĞRU
ÇIK
EĞER hashTablosu[indeks] eşit değil None VE i >= tabloBoyutu(hashTablosu):
ÇIK
EĞER bulundu:
RETURN hashTablosu[indeks][1]
EĞER bulunamadı:
RETURN "Eleman bulunamadı"

Bu pseudo kod, öncelikle aranacak elemanın indeksini hash fonksiyonu kullanarak hesaplar. Daha sonra, indeksi kullanarak hash tablosunu tarar ve elemanı bulana kadar aramaya devam eder. Eleman bulunursa, hash tablosunda depolanan değer geri döndürülür. Aksi takdirde, "Eleman bulunamadı" mesajı döndürülür.

  1. İleri Seviye Konular:

    • Algoritma Analizi (devamı)
      • Böl ve Fethet (Divide and Conquer) Algoritmaları
      • Geri Alınabilir (Backtracking) Algoritmaları
      • Rastgele (Randomized) Algoritmalar
      • İkili Arama Algoritmaları
    • O Notasyonu
      • En Kötü Durum Karmaşıklığının Hesaplanması
      • Ortalama Durum Karmaşıklığının Hesaplanması
      • O Notasyonunun Kullanım Alanları
    • Çoklu Boyutlu Diziler
      • Matrislerin Tanımlanması ve İşlemleri
      • Tensörlerin Tanımlanması ve İşlemleri
    • Sıralama Algoritmaları
      • Seçmeli Sıralama (Selection Sort)
      • Kabarcık Sıralama (Bubble Sort)
      • Ekleme Sıralama (Insertion Sort)
      • Hızlı Sıralama (Quick Sort)
      • Birleştirme Sıralama (Merge Sort)
    • Arama Algoritmaları
      • Doğrusal Arama (Linear Search)
      • Binary Search
      • Hash Tabanlı Arama (Hash-based Search)
    • Yapay Zeka Algoritmaları
      • Makine Öğrenmesi (Machine Learning)
      • Derin Öğrenme (Deep Learning)
      • Nöron Ağları (Neural Networks)
      • Genetik Algoritmalar (Genetic Algorithms)
      • Bulanık Mantık (Fuzzy Logic)
  2. Sonuç:

    • Pseudo Kodun Önemi
      • Kodlama Becerisi Gerektirmeden Algoritma Tasarımı Yapabilmek
      • Kodlama Sürecinde Hızlı ve Etkili Olmak
      • Algoritma Analizi Yapabilmek
    • Pseudo Kod Öğrenmek İçin Kaynaklar
      • İnternet Kaynakları
      • Kitaplar
      • Uygulamalar ve Yazılımlar
      • Online Kurslar ve Eğitimler